package models

import "time"

// 产品表
type Product struct {
	ID            int       `json:"id"`
	Name          string    `json:"name"`
	Model         string    `json:"model"`
	Brand         string    `json:"brand"`
	CategoryID    int       `json:"category_id"`
	Specs         string    `json:"specs"`
	Unit          string    `json:"unit"`
	PurchasePrice float64   `json:"purchase_price"`
	RetailPrice   float64   `json:"retail_price"`
	MinStock      int       `json:"min_stock"`
	MaxStock      int       `json:"max_stock"`
	Description   string    `json:"description"`
	CreatedAt     time.Time `json:"created_at"`
	UpdatedAt     time.Time `json:"updated_at"`
}

// 请求和响应结构体
type CreateProductRequest struct {
	Name          string  `json:"name" binding:"required"`
	Model         string  `json:"model"`
	Brand         string  `json:"brand"`
	CategoryID    int     `json:"category_id"`
	Specs         string  `json:"specs"`
	Unit          string  `json:"unit"`
	PurchasePrice float64 `json:"purchase_price"`
	RetailPrice   float64 `json:"retail_price"`
	MinStock      int     `json:"min_stock"`
	MaxStock      int     `json:"max_stock"`
	Description   string  `json:"description"`
}

type UpdateProductRequest struct {
	Name          *string  `json:"name"`
	Model         *string  `json:"model"`
	Brand         *string  `json:"brand"`
	CategoryID    *int     `json:"category_id"`
	Specs         *string  `json:"specs"`
	Unit          *string  `json:"unit"`
	PurchasePrice *float64 `json:"purchase_price"`
	RetailPrice   *float64 `json:"retail_price"`
	MinStock      *int     `json:"min_stock"`
	MaxStock      *int     `json:"max_stock"`
	Description   *string  `json:"description"`
}

type ProductResponse struct {
	Success  bool      `json:"success"`
	Message  string    `json:"message"`
	Data     *Product  `json:"data,omitempty"`
	Products []Product `json:"products,omitempty"`
}

// 产品分类表
type Category struct {
	ID          int    `json:"id"`
	Name        string `json:"name"`
	ParentID    int    `json:"parent_id"`
	Description string `json:"description"`
	SortOrder   int    `json:"sort_order"`
}

// 库存表
type Inventory struct {
	ID          int       `json:"id"`
	ProductID   int       `json:"product_id"`
	WarehouseID int       `json:"warehouse_id"`
	Quantity    int       `json:"quantity"`
	Locked      int       `json:"locked"`
	Status      string    `json:"status"`
	UpdatedAt   time.Time `json:"updated_at"`
}

// 供应商表
type Supplier struct {
	ID          int    `json:"id"`
	Name        string `json:"name"`
	Contact     string `json:"contact"`
	Phone       string `json:"phone"`
	Email       string `json:"email"`
	Address     string `json:"address"`
	BankAccount string `json:"bank_account"`
	Rating      int    `json:"rating"`
	Status      string `json:"status"`
}

// 入库记录表
type StockIn struct {
	ID          int       `json:"id"`
	ProductID   int       `json:"product_id"`
	SupplierID  int       `json:"supplier_id"`
	WarehouseID int       `json:"warehouse_id"`
	Quantity    int       `json:"quantity"`
	UnitPrice   float64   `json:"unit_price"`
	TotalAmount float64   `json:"total_amount"`
	BatchNumber string    `json:"batch_number"`
	InDate      time.Time `json:"in_date"`
	Operator    string    `json:"operator"`
	Remark      string    `json:"remark"`
	CreatedAt   time.Time `json:"created_at"`
}

// 出库记录表
type StockOut struct {
	ID          int       `json:"id"`
	ProductID   int       `json:"product_id"`
	CustomerID  int       `json:"customer_id"`
	WarehouseID int       `json:"warehouse_id"`
	Quantity    int       `json:"quantity"`
	UnitPrice   float64   `json:"unit_price"`
	TotalAmount float64   `json:"total_amount"`
	OutDate     time.Time `json:"out_date"`
	OrderNumber string    `json:"order_number"`
	Operator    string    `json:"operator"`
	Remark      string    `json:"remark"`
	CreatedAt   time.Time `json:"created_at"`
}

// 仓库表
type Warehouse struct {
	ID          int    `json:"id"`
	Name        string `json:"name"`
	Address     string `json:"address"`
	Area        string `json:"area"`
	Manager     string `json:"manager"`
	Phone       string `json:"phone"`
	Capacity    int    `json:"capacity"`
	Status      string `json:"status"`
	Description string `json:"description"`
}

// 客户表
type Customer struct {
	ID          int    `json:"id"`
	Name        string `json:"name"`
	Type        string `json:"type"`
	Contact     string `json:"contact"`
	Phone       string `json:"phone"`
	Email       string `json:"email"`
	Address     string `json:"address"`
	CreditLevel int    `json:"credit_level"`
	Status      string `json:"status"`
}

// 库存调拨表
type StockTransfer struct {
	ID              int       `json:"id"`
	ProductID       int       `json:"product_id"`
	FromWarehouseID int       `json:"from_warehouse_id"`
	ToWarehouseID   int       `json:"to_warehouse_id"`
	Quantity        int       `json:"quantity"`
	TransferDate    time.Time `json:"transfer_date"`
	Operator        string    `json:"operator"`
	Reason          string    `json:"reason"`
	Status          string    `json:"status"`
	CreatedAt       time.Time `json:"created_at"`
}

// 库存盘点表
type StockCheck struct {
	ID          int       `json:"id"`
	WarehouseID int       `json:"warehouse_id"`
	ProductID   int       `json:"product_id"`
	TheoryQty   int       `json:"theory_qty"`
	ActualQty   int       `json:"actual_qty"`
	Difference  int       `json:"difference"`
	CheckDate   time.Time `json:"check_date"`
	Checker     string    `json:"checker"`
	Reason      string    `json:"reason"`
	Status      string    `json:"status"`
	CreatedAt   time.Time `json:"created_at"`
}
